Remote systems, such as Terminal Service™ (TS) systems and Virtual Desktop Infrastructure (VDI) systems provided by the Microsoft Corporation, involve a server computer system (sometimes referred to as a remote server) where clients, acting locally, use remote application programs hosted by and/or resident on such a server system. In these remote systems, client computers rely on the remote server computer to provide computing functionality through the resident application programs. Examples of remote application programs include word processing, multimedia, and data management programs, among others.
Benefits of remote systems are that the client computers can be relatively low-powered since most functionality and computation has been moved to or otherwise takes place at the remote server. Another advantage is that data can reside at the physical location of the remote server and can be acted upon at that location by remote application programs without having to be transferred over relatively slow communications links to the client computers. When client-side requests are forwarded to the server for action, the requests are said to be redirected to the server.
Given the benefits of moving functionality to the remote server, many applications have been developed to work remotely. However, some applications are designed to operate solely on the local level, e.g., device drivers for Universal Serial Bus (USB) devices. Meanwhile, many other remote applications operate in conjunction with these localized drivers to interface with or otherwise control the actual USB devices. Since existing server-side applications are unable to directly communicate with a client side USB device, e.g., access the low-level interface of the device itself, the USB device drivers must be installed on the local client system where the USB device is physically connected. A server-side application attempting to communicate with the USB device does so by interfacing with the USB device driver installed on the client through what is known as “high-level redirection.” Aspects of high-level redirection are described in more detail in co-pending patent application titled “Plug and Play Device Redirection for Remote Systems,” U.S. application Ser. No. 11/278,529, which is incorporated herein by reference. High-level redirection, which operates on high-level interfaces, however, prevents the installation of specific, locally designed applications on remote servers. That is, these locally designed applications or drivers need to access the low-level interfaces of the USB devices and high-level redirection does not enable this functionality.
Consequently, to enable USB device functionality or use by a remote server, one solution has been to connect the USB device to the remote server itself. Connecting the device to the remote server is not practical in an enterprise environment where the server may not be readily found or accessed. As stated before, the other option is to install the USB device driver on the client and interface with the USB device through a set of high-level, specifically created, applications. This solution is also impractical for the many classes of USB devices in which no high-level redirection application has been created. Moreover, such a solution requires significant installations on the client computer system such that replacing the client computer system is more problematic once the installations have occurred.